console.show();
// console.setSize(900, 400)
//快速模式。该模式下会启用控件缓存，从而选择器获取屏幕控件更快。对于需要快速的控件操作的脚本可以使用该模式，一般脚本则没有必要使用该函数。
console.log("欢迎使用粮库预约自动化脚本");
console.log("脚本开始执行时间: " + new Date().toLocaleString());
// auto("fast");
// console.log("开启快速模式");
// 启动主流程
chooseLiangku();



/**
 * 主流程函数：选择粮库并完成预约
 * 功能描述：循环查找附近粮库，直到找到可预约的粮库，然后进入预约页面填写相关信息
 * 执行流程：
 * 1. 循环检查附近粮库列表，直到checkNum返回true
 * 2. 处理权限弹窗（如"同意"按钮）
 * 3. 点击第一个粮库进入预约页面
 * 4. 填写预约信息：车辆类型、数量、粮食品种、重量等
 */
function chooseLiangku() {
  console.log("开始不停点击附近粮库按钮，查询粮库");
  console.log("执行操作: 点击文本为'附近'的控件");
  text("附近").click();
  console.log("操作完成: 已点击'附近'按钮");
  sleep(1000);
  // 循环查找可预约粮库，直到checkNum返回true
  var retryCount = 0;
  while (!checkNum()) {
    retryCount++;
    console.log("第" + retryCount + "次尝试查找可预约粮库，未找到可预约粮库");
    sleep(5000); // 等待5秒避免频繁操作
    console.log("执行操作: 再次点击'附近'按钮刷新粮库列表");
    text("附近").click(); // 点击"附近"按钮刷新粮库列表
    console.log("操作完成: 已点击'附近'按钮，等待粮库列表出现");
  }

  // 处理权限弹窗，如果存在"同意"按钮则点击
  if (text("同意").exists()) {
    console.log("检测到权限弹窗，存在'同意'按钮");
    console.log("执行操作: 点击'同意'按钮");
    text("同意").click();
    console.log("操作完成: 已点击'同意'按钮");
  }

  console.log("等待页面加载300ms");
  sleep(300); // 等待页面加载

  // 点击第一个粮库，进入预约页面
  console.log("查找以'车'结尾的文本控件");
  var clsl_bounds = textEndsWith("车").findOne().bounds();
  console.log("找到控件，坐标: (" + clsl_bounds.centerX() + ", " + clsl_bounds.centerY() + ")");
  console.log("执行操作: 点击该控件进入预约页面");
  click(clsl_bounds.centerX(), clsl_bounds.centerY());
  console.log("操作完成: 已点击粮库进入预约页面");

  console.log("等待预约页面加载1000ms");
  sleep(1000); // 等待预约页面加载
  // 填写预约信息
  writeSlxx();
}

function writeSlxx() {
  console.log("进入预约页面，开始选择预约信息");

  // 检查车辆类型选择器是否存在
  if (!idContains("slyyQhmsThirdCLLX").exists()) {
    console.log("警告: 没找到id包含'slyyQhmsThirdCLLX'的控件");
  } else {
    console.log("成功找到id包含'slyyQhmsThirdCLLX'的控件");
  }

  // 选择车辆类型
  console.log("开始选择车类型");

  // 点击选择车辆类型输入框
  console.log("查找id包含'slyyQhmsThirdCLLX'的控件");
  var slyyQhmsThirdCLLX_bounds = idContains("slyyQhmsThirdCLLX")
    .findOne()
    .bounds();
  console.log("找到控件，坐标: (" + slyyQhmsThirdCLLX_bounds.centerX() + ", " + slyyQhmsThirdCLLX_bounds.centerY() + ")");
  console.log("执行操作: 点击车辆类型输入框");
  click(slyyQhmsThirdCLLX_bounds.centerX(), slyyQhmsThirdCLLX_bounds.centerY());
  console.log("操作完成: 已点击车辆类型输入框");
  sleep(200);

  // 从下拉选项中选择"大货车(10吨以上)"类型
  console.log("查找文本为'大货车(10吨以上)'的TextView控件");
  var slyyQhmsThirdCLLX_option_bounds = className("android.widget.TextView")
    .text("大货车(10吨以上)")
    .findOne()
    .bounds();
  console.log("找到选项控件，坐标: (" + slyyQhmsThirdCLLX_option_bounds.centerX() + ", " + slyyQhmsThirdCLLX_option_bounds.centerY() + ")");
  console.log("执行操作: 点击'大货车(10吨以上)'选项");
  click(
    slyyQhmsThirdCLLX_option_bounds.centerX(),
    slyyQhmsThirdCLLX_option_bounds.centerY()
  );
  console.log("操作完成: 已选择车辆类型为'大货车(10吨以上)'");

  console.log("点击了选择车类型");
  sleep(500);

  console.log("开始选择车辆数量");
  // 点击车辆数量输入框
  console.log("查找id包含'slyyQhmsThirdCLSL'的控件");
  var slyyQhmsThirdCLSL_bounds = idContains("slyyQhmsThirdCLSL")
    .findOne()
    .bounds();
  console.log("找到控件，坐标: (" + slyyQhmsThirdCLSL_bounds.centerX() + ", " + slyyQhmsThirdCLSL_bounds.centerY() + ")");
  console.log("执行操作: 点击车辆数量输入框");
  click(slyyQhmsThirdCLSL_bounds.centerX(), slyyQhmsThirdCLSL_bounds.centerY());
  console.log("操作完成: 已点击车辆数量输入框");
  sleep(500);

  // 从下拉选项中选择"1车/船"
  console.log("查找文本为'1车/船'的TextView控件");
  var slyyQhmsThirdCLSL_option_bounds = className("android.widget.TextView")
    .text("1车/船")
    .findOne()
    .bounds();
  console.log("找到选项控件，坐标: (" + slyyQhmsThirdCLSL_option_bounds.centerX() + ", " + slyyQhmsThirdCLSL_option_bounds.centerY() + ")");
  console.log("执行操作: 点击'1车/船'选项");
  click(
    slyyQhmsThirdCLSL_option_bounds.centerX(),
    slyyQhmsThirdCLSL_option_bounds.centerY()
  );
  console.log("操作完成: 已选择车辆数量为'1车/船'");
  console.log("点击了车辆数量");
  sleep(300);

  // 点击选择车船号的按钮（通过">"图标识别）
  console.log("查找文本为'>'且可点击的Image控件");
  var chButton = className("android.widget.Image").text(">").clickable(true).findOne();
  if (chButton) {
    console.log("找到车船号选择按钮");
    console.log("执行操作: 点击车船号选择按钮");
    chButton.click();
    console.log("操作完成: 已点击车船号选择按钮");
  } else {
    console.log("警告: 未找到车船号选择按钮");
  }
  console.log('点击了"选择车船号"');
  sleep(800);

  // 点击第一个车船号选项区域
  console.log("执行操作: 点击车船号选项区域(531, 168, 900, 294)");
  click(531, 168, 900, 294)
  console.log('点击了"选择车船号"的选项');

  sleep(500);

  console.log("开始选择粮食品种");
  // 点击粮食品种输入框
  console.log("查找id包含'lspzmc'的控件");
  var lspzmc_bounds = idContains("lspzmc").findOne().bounds();
  console.log("找到控件，坐标: (" + lspzmc_bounds.centerX() + ", " + lspzmc_bounds.centerY() + ")");
  console.log("执行操作: 点击粮食品种输入框");
  click(lspzmc_bounds.centerX(), lspzmc_bounds.centerY());
  console.log("操作完成: 已点击粮食品种输入框");
  sleep(500);

  // 从下拉选项中选择"小麦"
  console.log("查找文本为'小麦'且可点击的TextView控件");
  var lspzmc_option_bounds = className("android.widget.TextView").text("小麦").clickable(true).findOne().parent().bounds();
  console.log("找到选项控件，坐标: (" + lspzmc_option_bounds.centerX() + ", " + lspzmc_option_bounds.centerY() + ")");
  console.log("执行操作: 点击'小麦'选项");
  click(lspzmc_option_bounds.centerX(), lspzmc_option_bounds.centerY());
  console.log("操作完成: 已选择粮食品种为'小麦'");
  console.log('点击了"选择粮食品种"的选项');
  sleep(200);

  // 填写粮食重量（单位：吨）
  console.log("查找id包含'slyyQhmsThirdSL'的控件并填写重量'50'");
  var weightInput = idContains("slyyQhmsThirdSL").findOne();
  if (weightInput) {
    console.log("执行操作: 设置粮食重量为50吨");
    weightInput.setText("50");
    console.log("操作完成: 已设置粮食重量为50吨");
  } else {
    console.log("警告: 未找到粮食重量输入框");
  }

  // 点击提交按钮
  console.log("等待500ms后点击提交按钮");
  sleep(500);
  console.log("查找id包含'subSlyyQhmxBtn'的控件");
  var submitButton = idContains("subSlyyQhmxBtn").findOne();
  if (submitButton) {
    console.log("找到提交按钮");
    console.log("执行操作: 点击提交按钮");
    submitButton.click();
    console.log("操作完成: 已点击提交按钮");
  } else {
    console.log("警告: 未找到提交按钮");
  }
  console.log('点击了"提交"按钮');
  console.log('自动脚本完成，剩余动作需要手动操作');
  // sleep(500);


  // className("android.widget.Image").untilFind().forEach(function(item) {
  //   console.log(item)
  // });

  // console.log("检查是否存在验证码");
  // if (textContains("请依次点击").findOne().exists()) {
  //   console.log('检测到文字图片验证码');
  //   textContains("请依次点击").findOne().parent().parent().children().forEach(element => {
  //     console.log(element)
  //   });
  // } else if (textContains("拖动滑块完成拼图").findOne().exists()) {
  //   console.log('检测到滑块拖动验证码');
  //   textContains("拖动滑块完成拼图").findOne().parent().parent().children().forEach(element => {
  //     console.log(element)
  //   });
  // } else {
  //   console.log('未检测到验证码');
  // }

}

/**
 * 检查粮库可预约数量的辅助函数
 * 功能描述：遍历粮库列表，查找可预约数量大于0的粮库
 * 算法逻辑：
 * 1. 获取所有粮库列表项
 * 2. 遍历每个粮库，提取粮库名称和预约数量信息
 * 3. 使用正则表达式从文本中提取数字
 * 4. 如果预约数量>0，则点击该粮库并返回true
 * 5. 如果所有粮库都不可预约，返回false
 *
 * @returns {boolean} 是否找到可预约的粮库，true表示找到，false表示未找到
 */
function checkNum() {
  // 获取所有以"li"结尾的粮库列表项
  console.log("查找id以'li'结尾的控件集合");
  var liangku_array = idEndsWith("li").untilFind();
  console.log("找到" + liangku_array.length + "个粮库");

  // 遍历每个粮库进行检查
  for (var j = 0; j < liangku_array.length; j++) {
    console.log("处理第" + (j + 1) + "个粮库");
    var liangku = liangku_array[j];

    // 提取粮库名称（第2个子元素）
    var nameElement = liangku.child(1);
    if (!nameElement) {
      console.log("无法获取粮库名称元素");
      continue;
    }
    var liangku_name = nameElement.text();
    console.log("粮库名称:" + liangku_name);

    // 提取预约数量信息（第7个子元素）
    var countElement = liangku.child(6);
    if (!countElement) {
      console.log("无法获取预约数量元素");
      continue;
    }
    console.log("预约数量信息:" + countElement.text());
    var yysl_text = countElement.text();

    // 使用正则表达式从文本中提取数字
    var match = yysl_text.match(/\d+/);
    if (match) {
      // 将提取的字符串转换为整数
      let num = parseInt(match[0], 10);
      console.log("解析出的可预约数量: " + num);
      if (num > 0) {
        // 找到可预约的粮库，记录日志并点击
        console.log("粮库:" + liangku_name + ", 可预约数量:" + num);
        console.log("执行操作: 点击可预约的粮库");
        liangku.click(); // 点击该粮库进入详情
        console.log("操作完成: 已点击粮库，等待页面跳转1500ms");
        sleep(1500); // 等待页面跳转
        return true; // 返回成功标志
      } else {
        console.log("粮库:" + liangku_name + "无可预约数量");
      }
    } else {
      // 未能从文本中提取到数字
      console.log("未找到可预约数量信息");
    }
  }

  // 遍历完所有粮库后仍未找到可预约的
  console.log("遍历完所有粮库后仍未找到可预约的");
  return false;
}